/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.deployment.servicoimpl;

import br.com.deployment.entidade.acesso.Usuario;
import br.com.deployment.entidade.protocolo.Protocolo;
import br.com.deployment.entidade.tramite.Tramite;
import br.com.deployment.enums.Relatorio;
import br.com.deployment.interfaces.TramiteDaoIn;
import br.com.deployment.servico.CartorioServico;
import br.com.deployment.servico.ProtocoloServico;
import br.com.deployment.servico.TramiteServico;
import br.com.deployment.servico.UsuarioServico;
import br.com.deployment.utilitario.GeraRelatorio;
import br.com.deployment.utilitario.Msg;
import java.net.URL;
import java.util.HashMap;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;

/**
 *
 * @author roniere
 */
@Stateless
@LocalBean
public class TramiteServicoImpl implements TramiteServico{

    @EJB
    TramiteDaoIn tramiteDao;
    
    @EJB
    UsuarioServico usuarioServico;
    
    @EJB
    ProtocoloServico protocoloServico;
    
    @EJB
    CartorioServico cartorioServico;
        
    @Override
    public void save(Tramite entity) {
        if(!existeTramiteAberto(entity.getProtocolo())){
            tramiteDao.save(entity);
        }else{
            Msg.messagemError("Protocolo em trâmite");
            throw new IllegalArgumentException("Protocolo pendente a receber !");
        }
    }

    @Override
    public void delete(Tramite entity) {
        tramiteDao.delete(entity);
    }

    @Override
    public Tramite update(Tramite entity) {
        return tramiteDao.update(entity);
    }

    @Override
    public Tramite find(int entityID) {
        return tramiteDao.find(entityID);
    }

    @Override
    public List<Tramite> findAll() {
        return tramiteDao.findAll();
    }

    @Override
    public void tramitar(Tramite t) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    
    @Override
    public List<Tramite> findMyProtocolo(Usuario usuario, Protocolo protocolo){
        return tramiteDao.findMyProtocolo(usuario, protocolo);
    }
    
    public Boolean existeTramiteAberto(Protocolo protocolo){
        return tramiteDao.existeTramiteAberto(protocolo);
    }
    
    public void relatorio(Protocolo pr){
        try{
        GeraRelatorio geraRelatorio = new GeraRelatorio();
        HashMap<String, Object> parametros;
        
        pr = protocoloServico.find(pr.getId());
        
        parametros = new HashMap<String, Object>();
        
        parametros.put("dataCad", pr.getDataCad());
        parametros.put("id", pr.getId());
        parametros.put("cliente", pr.getCliente().getNome());
        parametros.put("doc", pr.getCliente().getCpf() == null ? pr.getCliente().getCnpj() : pr.getCliente().getCpf());
        parametros.put("logradouro", pr.getCliente().getEndereco().getTipo_logradouro().toString() + " " + pr.getCliente().getEndereco().getLogradouro());
        parametros.put("bairro", pr.getCliente().getEndereco().getBairro());
        parametros.put("cidade", pr.getCliente().getEndereco().getCidade().getNom_cidade());
        parametros.put("numero", pr.getCliente().getEndereco().getNumero());
        parametros.put("telefone", pr.getCliente().getEndereco().getTelefone());
        parametros.put("celular", pr.getCliente().getEndereco().getCelular());
        parametros.put("pagamento", pr.getFormasPagamento().toString());
        parametros.put("valorTotalCartorio", pr.getValorTotalCartorio());
        parametros.put("valorTotalFermojupi", pr.getValorTotalFermojupi());
        parametros.put("usuario", usuarioServico.getUsuario().getNome());
        parametros.put("cargo", usuarioServico.getUsuario().getCargo());
        parametros.put("obs", pr.getObs());
        
        
        parametros.put("tramites", tramiteDao.allTramiteProtocolo(pr));
        
        parametros = cartorioServico.getCartorioRelatorio(parametros);
        
        URL subreport = Thread.currentThread().getContextClassLoader().getResource("br/com/deployment/relatorios/tramiteSubRelatorio.jasper");
        System.err.println(subreport.toString());
        parametros.put("SUBREPORT_DIR", subreport.toString().replace("tramiteSubRelatorio.jasper" + "", ""));

        geraRelatorio.relatorio(parametros, null, Relatorio.RELATORIO_TRAMITE);
        }catch(Exception e){
             Msg.messagemError("Protocolo inexistente ou sem registro de trâmite");
            throw new IllegalArgumentException("Protocolo inexistente ou sem registro de trâmite");
        }
    }
}
